package com.chenjt.jvm.first.nine_String;

/**
 * 注释：intern()练习
 *
 * @author chenjt
 * @date 2025/6/13 15:28
 */
public class StringExer1 {

    public static void main(String[] args) {
        test1();
        test2();
    }


    private static void test1() {
        /**
         * new String("ab")
         * 下一行代码执行完之后，字符串常量池中没有"ab"
         */
        String s = new String("a") + new String("b");

        /**
         * jdk6：在字符串常量池中创建一个字符串"ab"
         * jdk7/8：字符串常量池中没有创建字符串"ab"，
         *         而是创建一个引用，指向new String("ab")，
         *         并返回此引用
         */
        String s2 = s.intern();

        // == 不单单比较内容，还比较地址
        System.out.println(s2 == "ab");// jdk6: true  jdk7/8：true
        System.out.println(s == "ab");// jdk6: false jdk7/8：true

    }


    private static void test2() {
        String x = "ab";
        /**
         * new String("ab")
         * 下一行代码执行完之后，字符串常量池中没有"ab"
         */
        String s = new String("a") + new String("b");

        /**
         * jdk6：在字符串常量池中创建一个字符串"ab"
         * jdk7/8：字符串常量池中没有创建字符串"ab"，
         *         而是创建一个引用，指向new String("ab")，
         *         并返回此引用
         */
        String s2 = s.intern();

        // == 不单单比较内容，还比较地址
        System.out.println(s2 == "ab");// jdk6/7/8: true
        System.out.println(s == "ab");// jdk6/7/8:  false


    }




}
